package com.project.mvprxsample.model;

import android.content.Context;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.project.mvprxsample.db.DataHelper;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by lvyang on 2017/05/12.
 * 基类Mode
 */
public class BaseMode<T> {

    DataHelper dbHelper;
    Dao<T, Integer> dao;

    public BaseMode(Context _context) {
        dbHelper = DataHelper.getDataHelper(_context);
    }

    public void setDao(Dao<T, Integer> dao){
        this.dao = dao;
    }

    public DataHelper getDbHelper(){
        return dbHelper;
    }


    /**
     * 添加一条数据
     *
     * @param t
     * @return
     */
    public boolean save(T t) {
        try {
            dao.create(t);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean createOrUpdate(T t) {
        try {
            dao.createOrUpdate(t);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 删除全表
     *
     * @return
     */
    public boolean delete() {
        try {
            dao.delete(dao.queryForAll());
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 依据一个实体删除一条数据
     *
     * @param t 实体对象
     * @return 是否删除成功
     */
    public boolean delete(T t) {
        try {
            dao.delete(t);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 依据Id删除一条数据
     *
     * @param Id
     * @return
     */
    public boolean deleteById(int Id) {
        try {
            dao.deleteById(Id);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 依据字敌我字段删除数据   如果符合条件的多条一起删除
     *
     * @param column
     * @param columnVal
     * @return
     */
    public boolean deleteByColumn(String column, String columnVal) {
        try {
            DeleteBuilder builder = dao.deleteBuilder();
            builder.where().eq(column, columnVal);
            dao.delete(builder.prepare());
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }


    /**
     * 依据ID查询一条数据
     *
     * @param Id
     * @return
     */
    public T getQueryEntivityByID(int Id) {
        try {
            return dao.queryForId(Id);

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查询表中所有数据
     *
     * @return
     */
    public List<T> getQueryAll() {
        try {
            return dao.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 依据column 查询符合的数据
     *
     * @param column
     * @param columnVal
     * @return
     */
    public List<T> getQueryByColumn(String column, String columnVal) {
        try {
            return dao.queryBuilder().where().eq(column, columnVal).query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 依据column 查询符合的数据
     *
     * @param column     第一个参数
     * @param columnVal  第一个参数结果
     * @param column2    第二个参数
     * @param columnVal2 第二个参数结果
     * @return List<T>
     */
    public List<T> getQueryByColumn(String column, String columnVal, String column2, String columnVal2) {
        try {
            return dao.queryBuilder().where().eq(column, columnVal).and().eq(column2, columnVal2).query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 依据column 查询符合的数据
     *
     * @param column     第一个参数
     * @param columnVal  第一个参数结果
     * @param column2    第二个参数
     * @param columnVal2 第二个参数结果
     * @param column3    第三个参数
     * @param columnVal3 第三个参数结果
     * @return List<T>
     */
    public List<T> getQueryByColumn(String column, String columnVal, String column2, String columnVal2, String column3, String columnVal3) {
        try {
            return dao.queryBuilder().where().eq(column, columnVal).and().eq(column2, columnVal2).and().eq(column3, columnVal3).query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public int update(T t) {
        try {
            return dao.update(t);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
}
